import { Component } from '@angular/core';
import { ChartData, ChartOptions } from 'chart.js';

@Component({
  selector: 'app-bid-evaluation',
  templateUrl: './bid-evaluation.component.html',
  styleUrls: ['./bid-evaluation.component.css']
})
export class BidEvaluationComponent {
  securityName: string = ''; // 证券名称
  startDate: string = ''; // 起始日期
  endDate: string = ''; // 结束日期
  dailyEvaluation: { date: string; value: number }[] = []; // 每天的估值结果
  summaryResult: { peak: number; valley: number; average: number } | null = null; // 时间段的峰值、谷值和平均值

  // 折线图数据和配置
  lineChartData: ChartData<'line'> = {
    labels: [], // 横轴标签（日期）
    datasets: [
      {
        data: [], // 纵轴数据（估值）
        label: '每日估值',
        borderColor: '#007bff',
        backgroundColor: 'rgba(0, 123, 255, 0.2)',
        pointBackgroundColor: '#007bff', // 散点颜色
        pointBorderColor: '#007bff', // 散点边框颜色
        pointRadius: 5, // 散点半径
        fill: false, // 不填充区域
      },
    ],
  };

  lineChartOptions: ChartOptions = {
    responsive: true,
    plugins: {
      legend: {
        display: true,
        position: 'top',
      },
    },
    elements: {
      line: {
        tension: 0, // 设置为 0 表示直线，设置为 0.3 表示平滑曲线
      },
    },
  };

  startEvaluation(): void {
    console.log(`开始估值: 证券名称=${this.securityName}, 起始日期=${this.startDate}, 结束日期=${this.endDate}`);

    const start = new Date(this.startDate);
    const end = new Date(this.endDate);
    const result: { date: string; value: number }[] = [];

    // 生成时间段内的每日估值数据
    for (let d = start; d <= end; d.setDate(d.getDate() + 1)) {
      result.push({
        date: d.toISOString().split('T')[0], // 格式化日期为 YYYY-MM-DD
        value: Math.floor(Math.random() * 100) + 50, // 模拟估值数据
      });
    }

    this.dailyEvaluation = result;

    // 更新折线图数据
    this.lineChartData.labels = result.map(item => item.date); // 横轴为日期
    this.lineChartData.datasets[0].data = result.map(item => item.value); // 纵轴为估值

    // 计算峰值、谷值和平均值
    const values = result.map(item => item.value);
    const peak = Math.max(...values);
    const valley = Math.min(...values);
    const average = Math.round(values.reduce((sum, val) => sum + val, 0) / values.length);

    this.summaryResult = { peak, valley, average };
  }
}
